/*
 * Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 * for details. All rights reserved. Use of this source code is governed by a
 * BSD-style license that can be found in the LICENSE file.
 */
/** 
 * @description Test rgba() color parsing results
 */
import "dart:html";
import "dart:math" as Math;
import "../../testcommon.dart";
import "../../../Utils/async_utils.dart";

main() {
  var ctx = createContext2d("canvas");

   parse(rgba) {
    ctx.globalCompositeOperation = 'copy';
    ctx.fillStyle = '#666';
    ctx.fillStyle = rgba;
    ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
    var idata = ctx.getImageData(0, 0, 1, 1);
    var data = idata.data;
    return "RGBA[" + data.join(", ") + "]";
  }

  shouldBe(parse('rgba(0.9.9%, 0%, 0%, 1)'), 'RGBA[102, 102, 102, 255]');
  shouldBe(parse('rgba(0, 0.., 0, 1)'), 'RGBA[102, 102, 102, 255]');
  shouldBe(parse('rgba(10%, .%, 0%, 1)'), 'RGBA[102, 102, 102, 255]');
  shouldBe(parse('rgba(13.37%1337%, 5%, 50.0%, 1)'), 'RGBA[102, 102, 102, 255]');
  shouldBe(parse('rgba(%, 50%, 50.0%, 1)'), 'RGBA[102, 102, 102, 255]');
  shouldBe(parse('rgba(50.0%, 50%, a%, 1)'), 'RGBA[102, 102, 102, 255]');
  shouldBe(parse('rgba(500%, 0%, 0%, 1)'), 'RGBA[255, 0, 0, 255]');
  shouldBe(parse('rgba(100%, 100%, 100%, 1)'), 'RGBA[255, 255, 255, 255]');
  shouldBe(parse('rgba(10.5%, 80%, 70%, 1)'), 'RGBA[26, 204, 179, 255]');
  shouldBe(parse('rgba(0%, 0%, 0%, 1)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(50.0%, 50.0%, 50.0%, 1)'), 'RGBA[128, 128, 128, 255]');
  shouldBe(parse('rgba(100%, 100%, 100%, 1)'), 'RGBA[255, 255, 255, 255]');
  shouldBe(parse('rgba(10.5%, 80%, 70%, 1)'), 'RGBA[26, 204, 179, 255]');
  shouldBe(parse('rgba(55.5%, 0.5%, 110%, 1)'), 'RGBA[142, 1, 255, 255]');
  shouldBe(parse('rgba(60.59998%, 0.59999%, 110.12345%, 1)'), 'RGBA[155, 1, 255, 255]');
  shouldBe(parse('rgba(10.999%, 0.999%, 0.000009%, 1)'), 'RGBA[28, 2, 0, 255]');
  shouldBe(parse('rgba(79.99999%, 99.99999%, 500%, 1)'), 'RGBA[204, 255, 255, 255]');
  shouldBe(parse('rgba(0, 0, 0, -0.10)'), 'RGBA[0, 0, 0, 0]');
  shouldBe(parse('rgba(0, 0, 0, -5.0)'), 'RGBA[0, 0, 0, 0]');
  shouldBe(parse('rgba(0, 0, 0, 5.0)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, -1)'), 'RGBA[0, 0, 0, 0]');
  shouldBe(parse('rgba(0, 0, 0, 0)'), 'RGBA[0, 0, 0, 0]');
  shouldBe(parse('rgba(0, 0, 0, 2)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, 2.0)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, 0.0)'), 'RGBA[0, 0, 0, 0]');
  shouldBe(parse('rgba(0, 0, 0, 00.0)'), 'RGBA[0, 0, 0, 0]');
  shouldBe(parse('rgba(0, 0, 0, 0.00)'), 'RGBA[0, 0, 0, 0]');
  shouldBe(parse('rgba(0, 0, 0, .1)'), 'RGBA[0, 0, 0, 25]');
  shouldBe(parse('rgba(0, 0, 0, .2)'), 'RGBA[0, 0, 0, 51]');
  shouldBe(parse('rgba(0, 0, 0, .3)'), 'RGBA[0, 0, 0, 76]');
  shouldBe(parse('rgba(0, 0, 0, .4)'), 'RGBA[0, 0, 0, 102]');
  shouldBe(parse('rgba(0, 0, 0, .5)'), 'RGBA[0, 0, 0, 127]');
  shouldBe(parse('rgba(0, 0, 0, .6)'), 'RGBA[0, 0, 0, 153]');
  shouldBe(parse('rgba(0, 0, 0, .7)'), 'RGBA[0, 0, 0, 179]');
  shouldBe(parse('rgba(0, 0, 0, .8)'), 'RGBA[0, 0, 0, 204]');
  shouldBe(parse('rgba(0, 0, 0, .9)'), 'RGBA[0, 0, 0, 230]');
  shouldBe(parse('rgba(0, 0, 0, 0.1)'), 'RGBA[0, 0, 0, 25]');
  shouldBe(parse('rgba(0, 0, 0, 0.2)'), 'RGBA[0, 0, 0, 51]');
  shouldBe(parse('rgba(0, 0, 0, 0.3)'), 'RGBA[0, 0, 0, 76]');
  shouldBe(parse('rgba(0, 0, 0, 0.4)'), 'RGBA[0, 0, 0, 102]');
  shouldBe(parse('rgba(0, 0, 0, 0.5)'), 'RGBA[0, 0, 0, 127]');
  shouldBe(parse('rgba(0, 0, 0, 0.6)'), 'RGBA[0, 0, 0, 153]');
  shouldBe(parse('rgba(0, 0, 0, 0.7)'), 'RGBA[0, 0, 0, 179]');
  shouldBe(parse('rgba(0, 0, 0, 0.8)'), 'RGBA[0, 0, 0, 204]');
  shouldBe(parse('rgba(0, 0, 0, 0.9)'), 'RGBA[0, 0, 0, 230]');
  shouldBe(parse('rgba(0, 0, 0, 1.0)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, 0.10)'), 'RGBA[0, 0, 0, 25]');
  shouldBe(parse('rgba(0, 0, 0, 0.20)'), 'RGBA[0, 0, 0, 51]');
  shouldBe(parse('rgba(0, 0, 0, 0.30)'), 'RGBA[0, 0, 0, 76]');
  shouldBe(parse('rgba(0, 0, 0, 0.40)'), 'RGBA[0, 0, 0, 102]');
  shouldBe(parse('rgba(0, 0, 0, 0.50)'), 'RGBA[0, 0, 0, 127]');
  shouldBe(parse('rgba(0, 0, 0, 0.60)'), 'RGBA[0, 0, 0, 153]');
  shouldBe(parse('rgba(0, 0, 0, 0.70)'), 'RGBA[0, 0, 0, 179]');
  shouldBe(parse('rgba(0, 0, 0, 0.80)'), 'RGBA[0, 0, 0, 204]');
  shouldBe(parse('rgba(0, 0, 0, 0.90)'), 'RGBA[0, 0, 0, 230]');
  shouldBe(parse('rgba(0, 0, 0, 1.00)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, .10)'), 'RGBA[0, 0, 0, 25]');
  shouldBe(parse('rgba(0, 0, 0, .20)'), 'RGBA[0, 0, 0, 51]');
  shouldBe(parse('rgba(0, 0, 0, .30)'), 'RGBA[0, 0, 0, 76]');
  shouldBe(parse('rgba(0, 0, 0, .40)'), 'RGBA[0, 0, 0, 102]');
  shouldBe(parse('rgba(0, 0, 0, .50)'), 'RGBA[0, 0, 0, 127]');
  shouldBe(parse('rgba(0, 0, 0, .60)'), 'RGBA[0, 0, 0, 153]');
  shouldBe(parse('rgba(0, 0, 0, .70)'), 'RGBA[0, 0, 0, 179]');
  shouldBe(parse('rgba(0, 0, 0, .80)'), 'RGBA[0, 0, 0, 204]');
  shouldBe(parse('rgba(0, 0, 0, .90)'), 'RGBA[0, 0, 0, 230]');
  shouldBe(parse('rgba(0, 0, 0, 0.10000000000000000000000)'), 'RGBA[0, 0, 0, 25]');
  shouldBe(parse('rgba(0, 0, 0, 0.20000000000000000000000)'), 'RGBA[0, 0, 0, 51]');
  shouldBe(parse('rgba(0, 0, 0, 0.30000000000000000000000)'), 'RGBA[0, 0, 0, 76]');
  shouldBe(parse('rgba(0, 0, 0, 0.40000000000000000000000)'), 'RGBA[0, 0, 0, 102]');
  shouldBe(parse('rgba(0, 0, 0, 0.50000000000000000000000)'), 'RGBA[0, 0, 0, 127]');
  shouldBe(parse('rgba(0, 0, 0, 0.60000000000000000000000)'), 'RGBA[0, 0, 0, 153]');
  shouldBe(parse('rgba(0, 0, 0, 0.70000000000000000000000)'), 'RGBA[0, 0, 0, 179]');
  shouldBe(parse('rgba(0, 0, 0, 0.80000000000000000000000)'), 'RGBA[0, 0, 0, 204]');
  shouldBe(parse('rgba(0, 0, 0, 0.90000000000000000000000)'), 'RGBA[0, 0, 0, 230]');
  shouldBe(parse('rgba(0, 0, 0, 1.00000000000000000000000)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, 0.990)'), 'RGBA[0, 0, 0, 253]');
  shouldBe(parse('rgba(0, 0, 0, 0.991)'), 'RGBA[0, 0, 0, 253]');
  shouldBe(parse('rgba(0, 0, 0, 0.992)'), 'RGBA[0, 0, 0, 253]');
  shouldBe(parse('rgba(0, 0, 0, 0.993)'), 'RGBA[0, 0, 0, 254]');
  shouldBe(parse('rgba(0, 0, 0, 0.994)'), 'RGBA[0, 0, 0, 254]');
  shouldBe(parse('rgba(0, 0, 0, 0.995)'), 'RGBA[0, 0, 0, 254]');
  shouldBe(parse('rgba(0, 0, 0, 0.996)'), 'RGBA[0, 0, 0, 254]');
  shouldBe(parse('rgba(0, 0, 0, 0.997)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, 0.998)'), 'RGBA[0, 0, 0, 255]');
  shouldBe(parse('rgba(0, 0, 0, 0.999)'), 'RGBA[0, 0, 0, 255]');
}
